home *** CD-ROM | disk | FTP | other *** search
/ Assassins - Ultimate CD Games Collection 4 / Assassins 4 (1999)(Weird Science).iso / misc / omega / source / guild2.c < prev    next >
C/C++ Source or Header  |  1997-05-02  |  24KB  |  787 lines

  1. /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
  2. /* guild2.c */
  3. /* L_ functions  */ 
  4.  
  5. /* These functions implement the various guilds. */
  6. /* They are all l_ functions since they are basically activated*/
  7. /* at some site or other. */
  8.  
  9. #include "glob.h"
  10.  
  11.  
  12. void l_thieves_guild()
  13. {
  14.   int fee,count,i,number,done=FALSE,dues=1000;
  15.   char c,action;
  16.   pob lockpick;
  17.   print1("You have penetrated to the Lair of the Thieves' Guild.");
  18.   if (! nighttime()) 
  19.     print2("There aren't any thieves around in the daytime.");
  20.   else {
  21.     if ((Player.rank[THIEVES]==TMASTER) &&
  22.     (Player.level > Shadowlordlevel) &&
  23.     find_and_remove_item(THINGID+16,-1)) {
  24.       print2("You nicked the Justiciar's Badge!");
  25.       morewait();
  26.       print1("The Badge is put in a place of honor in the Guild Hall.");
  27.       print2("You are now the Shadowlord of the Thieves' Guild!");
  28.       morewait();
  29.       print1("Who says there's no honor among thieves?");
  30.       strcpy(Shadowlord,Player.name);
  31.       Shadowlordlevel = Player.level;
  32.       morewait();
  33.       Shadowlordbehavior = fixnpc(4);
  34.       save_hiscore_npc(7);
  35.       clearmsg();
  36.       print1("You learn the Spell of Shadowform.");
  37.       Spells[S_SHADOWFORM].known = TRUE;
  38.       morewait();
  39.       clearmsg();
  40.       Player.rank[THIEVES]=SHADOWLORD;
  41.       Player.maxagi += 2;
  42.       Player.maxdex += 2;
  43.       Player.agi += 2;
  44.       Player.dex += 2;
  45.     }
  46.     while (! done) {
  47.       menuclear();
  48.       if (Player.rank[THIEVES] == 0)
  49.     menuprint("a: Join the Thieves' Guild.\n");
  50.       else
  51.     menuprint("b: Raise your Guild rank.\n");
  52.       menuprint("c: Get an item identified.\n");
  53.       if (Player.rank[THIEVES] > 0)
  54.     menuprint("d: Fence an item.\n");
  55.       menuprint("ESCAPE: Leave this Den of Iniquity.");
  56.       showmenu();
  57.       action = mgetc();
  58.       if (action == ESCAPE) done = TRUE;
  59.       else if (action == 'a') {
  60.     done = TRUE;
  61.     if (Player.rank[THIEVES]> 0)
  62.       print2("You are already a member!");
  63.     else if (Player.alignment > 10) 
  64.       print2("You are too lawful to be a thief!");
  65.     else {
  66.       dues += dues*(12-Player.dex)/9;
  67.       dues += Player.alignment*5;
  68.       dues = max(100,dues);
  69.       clearmsg();
  70.       mprint("Dues are");
  71.       mnumprint(dues);
  72.       mprint(" Au. Pay it? [yn] ");
  73.       if (ynq1() =='y') {
  74.         if (Player.cash < dues) {
  75.           print1("You can't cheat the Thieves' Guild!");
  76.           print2("... but the Thieves' Guild can cheat you....");
  77.           Player.cash = 0;
  78.         }
  79.         else {
  80.           print1("Shadowlord ");
  81.           nprint1(Shadowlord);
  82.           print2("enters your name into the roll of the Guild."); 
  83.           morewait();
  84.           clearmsg();
  85.           print1("As a special bonus, you get a free lockpick.");
  86.           print2("You are taught the spell of Object Detection.");
  87.           morewait();
  88.           Spells[S_OBJ_DET].known = TRUE; 
  89.           lockpick = ((pob) checkmalloc(sizeof(objtype)));
  90.           *lockpick = Objects[THINGID+2]; /* lock pick */
  91.           gain_item(lockpick);
  92.           Player.cash -= dues;
  93.           dataprint();
  94.           Player.guildxp[THIEVES]=1;
  95.           Player.rank[THIEVES]=TMEMBER;
  96.           Player.maxdex++;Player.dex++;Player.agi++;Player.maxagi++;
  97.         }
  98.       }
  99.     }
  100.       }
  101.       else if (action == 'b') {
  102.     if (Player.rank[THIEVES]==0)
  103.       print2("You are not even a member!");
  104.     else if (Player.rank[THIEVES]==SHADOWLORD) 
  105.       print2("You can't get any higher than this!");
  106.     else if (Player.rank[THIEVES]==TMASTER) {
  107.       if (Player.level <= Shadowlordlevel)
  108.         print2("You are not experienced enough to advance.");
  109.       else print2("You must bring back the Justiciar's Badge!");
  110.     }
  111.     else if (Player.rank[THIEVES]==THIEF) {
  112.       if (Player.guildxp[THIEVES] < 4000)
  113.         print2("You are not experienced enough to advance.");
  114.       else  {
  115.         print1("You are now a Master Thief of the Guild!");
  116.         print2("You are taught the Spell of Apportation.");
  117.         morewait();
  118.         print1("To advance to the next level you must return with");
  119.         print2("the badge of the Justiciar (cursed be his name).");
  120.         morewait();
  121.         clearmsg();
  122.         print1("The Justiciar's office is just south of the gaol.");
  123.         Spells[S_APPORT].known = TRUE;
  124.         Player.rank[THIEVES]=TMASTER;
  125.         Player.maxagi++;
  126.         Player.maxdex++;
  127.         Player.agi++;
  128.         Player.dex++;
  129.       }
  130.     }
  131.     else if (Player.rank[THIEVES]==ATHIEF) {    
  132.       if (Player.guildxp[THIEVES] < 1500)
  133.         print2("You are not experienced enough to advance.");
  134.       else  {
  135.         print1("You are now a ranking Thief of the Guild!");
  136.         print2("You learn the Spell of Invisibility.");
  137.         Spells[S_INVISIBLE].known = TRUE;
  138.         Player.rank[THIEVES]=THIEF;
  139.         Player.agi++;
  140.         Player.maxagi++;
  141.       }
  142.     }
  143.     else if (Player.rank[THIEVES]==TMEMBER) {
  144.       if (Player.guildxp[THIEVES] < 400)
  145.         print2("You are not experienced enough to advance.");
  146.       else {
  147.         print1("You are now an Apprentice Thief!");
  148.         print2("You are taught the Spell of Levitation.");
  149.         Spells[S_LEVITATE].known = TRUE;
  150.         Player.rank[THIEVES]=ATHIEF;
  151.         Player.dex++;
  152.         Player.maxdex++;
  153.       }
  154.     }
  155.       }
  156.       else if (action == 'c') {
  157.     if (Player.rank[THIEVES]==0) {
  158.       print1("RTG, Inc, Appraisers. Identification Fee: 50Au/item.");
  159.       fee = 50;
  160.     }
  161.     else {
  162.       fee = 5;
  163.       print1("The fee is 5Au per item.");
  164.     }
  165.     print2("Identify one item, or all possessions? [ip] ");
  166.     if ((char) mcigetc()=='i') {
  167.       if (Player.cash < fee)
  168.         print2("Try again when you have the cash.");
  169.       else {
  170.         Player.cash -= fee;
  171.         dataprint();
  172.         identify(0);
  173.       }
  174.     }
  175.     else {
  176.       count = 0;
  177.       for(i=1;i<MAXITEMS;i++)
  178.         if (Player.possessions[i] != NULL)
  179.           if (Player.possessions[i]->known < 2)
  180.         count++;
  181.       for(i=0;i<Player.packptr;i++)
  182.         if (Player.pack[i] != NULL)
  183.           if (Player.pack[i]->known < 2)
  184.         count++;
  185.       clearmsg();
  186.       print1("The fee will be: ");
  187.       mnumprint(max(count*fee,fee));
  188.       nprint1("Au. Pay it? [yn] ");
  189.       if (ynq1()=='y')
  190.       if (Player.cash < max(count*fee,fee))
  191.         print2("Try again when you have the cash.");
  192.       else {
  193.         Player.cash -= max(count*fee,fee);
  194.         dataprint();
  195.         identify(1);
  196.       }
  197.     }
  198.       }
  199.       else if (action == 'd') {
  200.     if (Player.rank[THIEVES]==0)
  201.       print2("Fence? Who said anything about a fence?");
  202.     else {
  203.       print1("Fence one item or go through pack? [ip] ");
  204.       if ((char) mcigetc()=='i') {
  205.         i = getitem(NULL_ITEM);
  206.         if ((i==ABORT) || (Player.possessions[i] == NULL))
  207.           print2("Huh, Is this some kind of set-up?");
  208.         else if (Player.possessions[i]->blessing < 0) 
  209.           print2("I don't want to buy a cursed item!");
  210.         else {
  211.           clearmsg();
  212.           print1("I'll give you ");
  213.           mlongprint(2 * item_value(Player.possessions[i]) / 3);
  214.           nprint1("Au each. OK? [yn] ");
  215.           if (ynq1() == 'y') {
  216.         number = getnumber(Player.possessions[i]->number);
  217.         if ((number >= Player.possessions[i]->number) &&
  218.             Player.possessions[i]->used) {
  219.           Player.possessions[i]->used = FALSE;
  220.           item_use(Player.possessions[i]);
  221.         }
  222.         Player.cash += number*2*item_value(Player.possessions[i])/3;
  223.         dispose_lost_objects(number,Player.possessions[i]);
  224.         dataprint();
  225.           }
  226.           else print2("Hey, gimme a break, it was a fair price!");
  227.         }
  228.       }
  229.       else {
  230.         for(i=0;i<Player.packptr;i++) {
  231.           if (Player.pack[i]->blessing > -1) {
  232.         clearmsg();
  233.         print1("Sell ");
  234.         nprint1(itemid(Player.pack[i]));
  235.         nprint1(" for ");
  236.         mlongprint(2*item_value(Player.pack[i])/3);
  237.         nprint1("Au each? [ynq] ");
  238.         if ((c=ynq1())=='y') {
  239.           number = getnumber(Player.pack[i]->number);
  240.           Player.cash += 2*number * item_value(Player.pack[i]) / 3;
  241.           Player.pack[i]->number -= number;
  242.           if (Player.pack[i]->number < 1) {
  243.             free((char *)Player.pack[i]);
  244.             Player.pack[i] = NULL;
  245.           }
  246.           dataprint();
  247.         }
  248.         else if (c=='q') break;
  249.           }
  250.         }
  251.         fixpack();
  252.       }
  253.     }
  254.       }
  255.     }
  256.   }
  257.   xredraw();
  258. }
  259.  
  260. void l_college()
  261. {
  262.   char action;
  263.   int done=FALSE,enrolled = FALSE;
  264.   print1("The Collegium Magii. Founded 16937, AOF.");
  265.   if (nighttime())
  266.     print2("The Registration desk is closed at night....");
  267.   else {
  268.     while (! done) {
  269.       if ((Player.rank[COLLEGE]==MAGE) &&
  270.       (Player.level > Archmagelevel) &&
  271.       find_and_remove_item(CORPSEID,ML10+1)) {
  272.     print1("You brought back the heart of the Eater of Magic!");
  273.     morewait();
  274.     print1("The Heart is sent to the labs for analysis.");
  275.     print2("The Board of Trustees appoints you Archmage!");
  276.     morewait();
  277.     clearmsg();
  278.     strcpy(Archmage,Player.name);
  279.     Archmagelevel = Player.level;
  280.     Player.rank[COLLEGE] = ARCHMAGE;
  281.     Player.maxiq += 5;
  282.     Player.iq += 5;
  283.     Player.maxpow += 5;
  284.     Player.pow += 5;
  285.     morewait();
  286.     Archmagebehavior = fixnpc(4);
  287.     save_hiscore_npc(9);
  288.       }
  289.       menuclear();
  290.       menuprint("May we help you?\n\n");
  291.       menuprint("a: Enroll in the College.\n");
  292.       menuprint("b: Raise your College rank.\n");
  293.       menuprint("c: Do spell research.\n");
  294.       menuprint("ESCAPE: Leave these hallowed halls.\n");
  295.       showmenu();
  296.       action = mgetc();
  297.       if (action == ESCAPE) done = TRUE;
  298.       else if (action == 'a') {
  299.     if (Player.rank[COLLEGE] > 0)
  300.       print2("You are already enrolled!");
  301.     else if (Player.iq < 13) 
  302.       print2("Your low IQ renders you incapable of being educated.");
  303.     else if (Player.rank[CIRCLE] > 0)
  304.       print2("Sorcery and our Magic are rather incompatable, no?");
  305.     else {
  306.       if (Player.iq > 17) {
  307.         print2("You are given a scholarship!");
  308.         morewait();
  309.         enrolled=TRUE;
  310.       }
  311.       else {
  312.         print1("Tuition is 1000Au. ");
  313.         nprint1("Pay it? [yn] ");
  314.         if (ynq1() =='y') {
  315.           if (Player.cash < 1000)
  316.         print2("You don't have the funds!");
  317.           else {
  318.         Player.cash -= 1000;
  319.         enrolled = TRUE;
  320.         dataprint();
  321.           }        
  322.         }
  323.       }
  324.       if (enrolled) {
  325.         print1("Archmage ");
  326.         nprint1(Archmage);
  327.         nprint1(" greets you and congratulates you on your acceptance.");
  328.         print2("You are now enrolled in the Collegium Magii!");
  329.         morewait();
  330.         print1("You are now a Novice.");
  331.         print2("You may research 1 spell, for your intro class.");
  332.         Spellsleft = 1;
  333.         Player.rank[COLLEGE] = INITIATE;
  334.         Player.guildxp[COLLEGE] = 1;
  335.         Player.maxiq += 1;
  336.         Player.iq += 1;
  337.         Player.maxpow += 1;
  338.         Player.pow += 1;
  339.       }
  340.     }
  341.       }
  342.       else if (action == 'b') {
  343.     if (Player.rank[COLLEGE] == 0)
  344.       print2("You have not even been initiated, yet!");
  345.     else if (Player.rank[COLLEGE]==ARCHMAGE) 
  346.       print2("You are at the pinnacle of mastery in the Collegium.");
  347.     else if (Player.rank[COLLEGE]==MAGE) {
  348.       if (Player.level <= Archmagelevel)
  349.         print2("You are not experienced enough to advance.");
  350.       else
  351.         print2("You must return with the heart of the Eater of Magic!");
  352.     }
  353.     else if (Player.rank[COLLEGE]==PRECEPTOR) {
  354.       if (Player.guildxp[COLLEGE] < 4000)
  355.         print2("You are not experienced enough to advance.");
  356.       else  {
  357.         print1("You are now a Mage of the Collegium Magii!");
  358.         print2("You may research 6 spells for postdoctoral research.");
  359.         Spellsleft += 6;
  360.         morewait();
  361.         print1("To become Archmage, you must return with the");
  362.         print2("heart of the Eater of Magic");
  363.         morewait();
  364.         clearmsg();
  365.         print1("The Eater may be found on a desert isle somewhere.");
  366.         Player.rank[COLLEGE] = MAGE;
  367.         Player.maxiq += 2;
  368.         Player.iq += 2;
  369.         Player.maxpow += 2;
  370.         Player.pow += 2;
  371.       }
  372.     }
  373.     else if (Player.rank[COLLEGE]==STUDENT) {
  374.       if (Player.guildxp[COLLEGE] < 1500)
  375.         print2("You are not experienced enough to advance.");
  376.       else  {
  377.         print1("You are now a Preceptor of the Collegium Magii!");
  378.         print2("You are taught the basics of ritual magic.");
  379.         morewait();
  380.         clearmsg();
  381.         print1("Your position allows you to research 4 spells.");
  382.         Spellsleft +=4;
  383.         Spells[S_RITUAL].known = TRUE;
  384.         Player.rank[COLLEGE] = PRECEPTOR;
  385.         Player.maxiq += 1;
  386.         Player.iq += 1;
  387.         Player.maxpow += 1;
  388.         Player.pow += 1;
  389.       }
  390.     }
  391.     else if (Player.rank[COLLEGE]==NOVICE) {
  392.       if (Player.guildxp[COLLEGE] < 400)
  393.         print2("You are not experienced enough to advance.");
  394.       else  {
  395.         print1("You are now a Student at the Collegium Magii!");
  396.         print2("You are taught the spell of identification.");
  397.         morewait();
  398.         clearmsg();
  399.         print1("Thesis research credit is 2 spells.");
  400.         Spellsleft+=2;
  401.         Spells[S_IDENTIFY].known = TRUE;
  402.         Player.rank[COLLEGE] = STUDENT;
  403.         Player.maxiq += 1;
  404.         Player.iq += 1;
  405.         Player.maxpow += 1;
  406.         Player.pow += 1;
  407.       }
  408.     }
  409.       }
  410.       else if (action == 'c') {
  411.     clearmsg();
  412.     if (Spellsleft > 0) {
  413.       print1("Research permitted: ");
  414.       mnumprint(Spellsleft);
  415.       nprint1(" Spells.");
  416.       morewait();
  417.     }
  418.     if (Spellsleft < 1) {
  419.       print1("Extracurricular Lab fee: 2000 Au. ");
  420.       nprint1("Pay it? [yn] ");
  421.       if (ynq1()=='y') {
  422.         if (Player.cash < 2000) 
  423.           print1("Try again when you have the cash.");
  424.         else {
  425.           Player.cash -= 2000;
  426.           dataprint();
  427.           Spellsleft = 1;
  428.         }
  429.       }
  430.     }
  431.     if (Spellsleft > 0) {
  432.       learnspell(0);
  433.       Spellsleft--;
  434.     }
  435.       }
  436.     }
  437.   }
  438.   xredraw();
  439. }
  440.  
  441.  
  442.  
  443. void l_sorcerors()
  444. {
  445.   char action;
  446.   int done=FALSE,fee=3000;
  447.   long total;
  448.   print1("The Circle of Sorcerors.");
  449.   if (Player.rank[CIRCLE] == -1) {
  450.     print2("Fool! Didn't we tell you to go away?");
  451.     Player.mana = 0;
  452.     dataprint();
  453.   }
  454.   else  while (! done) {
  455.     if ((Player.rank[CIRCLE]==HIGHSORCEROR) &&
  456.     (Player.level > Primelevel) &&
  457.     find_and_remove_item(CORPSEID,ML10+2)) {
  458.       print2("You obtained the Crown of the Lawgiver!");
  459.       morewait();
  460.       print1("The Crown is ritually sacrificed to the Lords of Chaos.");
  461.       print2("You are now the Prime Sorceror of the Inner Circle!");
  462.       strcpy(Prime,Player.name);
  463.       Primelevel = Player.level;
  464.       morewait();
  465.       Primebehavior = fixnpc(4);
  466.       save_hiscore_npc(10);
  467.       clearmsg();
  468.       print1("You learn the Spell of Disintegration!");
  469.       morewait();
  470.       clearmsg();
  471.       Spells[S_DISINTEGRATE].known = TRUE;
  472.       Player.rank[CIRCLE] = PRIME;
  473.       Player.maxpow += 10;
  474.       Player.pow += 10;
  475.     }
  476.     menuclear();
  477.     menuprint("May we help you?\n\n");
  478.     menuprint("a: Become an Initiate of the Circle.\n");
  479.     menuprint("b: Raise your rank in the Circle.\n");
  480.     menuprint("c: Restore mana points\n");
  481.     menuprint("ESCAPE: Leave these Chambers of Power.\n");
  482.     showmenu();
  483.     action = mgetc();
  484.     if (action == ESCAPE) done = TRUE;
  485.     else if (action == 'a') {
  486.       if (Player.rank[CIRCLE] > 0)
  487.       print2("You are already an initiate!");
  488.       else if (Player.alignment > 0)
  489.     print2("You may not join -- you reek of Law!");
  490.       else if (Player.rank[COLLEGE] != 0)
  491.     print2("Foolish Mage!  You don't have the right attitude to Power!");
  492.       else {
  493.     fee += Player.alignment*100;
  494.     fee += fee*(12 - Player.pow)/9;
  495.     fee = max(100,fee);
  496.     clearmsg();
  497.     mprint("For you, there is an initiation fee of");
  498.     mnumprint(fee);
  499.     mprint(" Au.");
  500.     print2("Pay it? [yn] ");
  501.     if (ynq2() =='y') {
  502.       if (Player.cash < fee) 
  503.         print3("Try again when you have the cash!");
  504.       else {
  505.         print1("Prime Sorceror ");
  506.         nprint1(Prime);
  507.         print2("conducts your initiation into the circle of novices.");
  508.         morewait();
  509.         clearmsg();
  510.         print1("You learn the Spell of Magic Missiles.");
  511.         Spells[S_MISSILE].known = TRUE;
  512.         Player.cash -= fee;
  513.         dataprint();
  514.         Player.rank[CIRCLE] = INITIATE;
  515.         Player.guildxp[CIRCLE] = 1;
  516.         Player.maxpow++;
  517.         Player.pow++;
  518.       }
  519.     }
  520.       }
  521.     }
  522.     else if (action == 'b') {
  523.       if (Player.rank[CIRCLE] == 0)
  524.     print2("You have not even been initiated, yet!");
  525.       else if (Player.alignment > -1) {
  526.     print1("Ahh! You have grown too lawful!!!");
  527.     print2("You are hereby blackballed from the Circle!");
  528.     Player.rank[CIRCLE] = -1;
  529.     morewait();
  530.     clearmsg();
  531.     print1("A pox upon thee!");
  532.     if (! Player.immunity[INFECTION])
  533.       Player.status[DISEASED]+=100;
  534.     print2("And a curse on your possessions!");
  535.     morewait();
  536.     clearmsg();
  537.     acquire(-1);
  538.     clearmsg();
  539.     enchant(-1);
  540.     bless(-1);
  541.     print3("Die, false sorceror!");
  542.     p_damage(25,UNSTOPPABLE,"a sorceror's curse");
  543.       }
  544.       else if (Player.rank[CIRCLE]==PRIME) 
  545.     print2("You are at the pinnacle of mastery in the Circle.");
  546.       else if (Player.rank[CIRCLE]==HIGHSORCEROR) {
  547.     if (Player.level <= Primelevel)
  548.       print2("You are not experienced enough to advance.");
  549.     else 
  550.       print2("You must return with the Crown of the LawBringer!");
  551.       }
  552.       else if (Player.rank[CIRCLE]==SORCEROR) {
  553.     if (Player.guildxp[CIRCLE] < 4000)
  554.       print2("You are not experienced enough to advance.");
  555.     else  {
  556.       print1("You are now a High Sorceror of the Inner Circle!");
  557.       print2("You learn the Spell of Disruption!");
  558.       morewait();
  559.       clearmsg();
  560.       print1("To advance you must return with the LawBringer's Crown!");
  561.       print2("The LawBringer resides on Star Peak.");
  562.       Spells[S_DISRUPT].known = TRUE;
  563.       Player.rank[CIRCLE] = HIGHSORCEROR;
  564.       Player.maxpow += 5;
  565.       Player.pow += 5;
  566.     }
  567.       }
  568.       else if (Player.rank[CIRCLE]==ENCHANTER) {
  569.     if (Player.guildxp[CIRCLE] < 1500)
  570.       print2("You are not experienced enough to advance.");
  571.     else  {
  572.       print1("You are now a member of the Circle of Sorcerors!");
  573.       print2("You learn the Spell of Ball Lightning!");
  574.       Spells[S_LBALL].known = TRUE;
  575.       Player.rank[CIRCLE] = SORCEROR;
  576.       Player.maxpow += 2; 
  577.       Player.pow+=2;
  578.     }
  579.       }
  580.       else if (Player.rank[CIRCLE]==INITIATE) {
  581.     if (Player.guildxp[CIRCLE] < 400)
  582.       print2("You are not experienced enough to advance.");
  583.     else  {
  584.       print1("You are now a member of the Circle of Enchanters!");
  585.       print2("You learn the Spell of Firebolts.");
  586.       Spells[S_FIREBOLT].known = TRUE;
  587.       Player.rank[CIRCLE] = ENCHANTER;
  588.       Player.maxpow+=2;
  589.       Player.pow+=2;
  590.     }
  591.       }
  592.     }
  593.     else if (action == 'c') {
  594.       done = TRUE;
  595.       fee = Player.level*100;
  596.       if (Player.rank[CIRCLE]) fee = fee / 2;
  597.       clearmsg();
  598.       print1("That will be: ");
  599.       mnumprint(fee);
  600.       nprint1("Au. Pay it? [yn] ");
  601.       if (ynq1()=='y') {
  602.     if (Player.cash < fee) 
  603.       print2("Begone, deadbeat, or face the wrath of the Circle!");
  604.     else {
  605.       Player.cash -= fee;
  606.       total = calcmana();
  607.       while (Player.mana < total) {
  608.         Player.mana++;
  609.         dataprint();
  610.       }
  611.       print2("Have a sorcerous day, now!");
  612.     }
  613.       }
  614.       else print2("Be seeing you!");
  615.     }
  616.   }
  617.   xredraw();
  618. }
  619.  
  620.  
  621.  
  622.  
  623. void l_order()
  624. {
  625.   pob newitem;
  626.   print1("The Headquarters of the Order of Paladins.");
  627.   morewait();
  628.   if ((Player.rank[ORDER]==PALADIN) &&
  629.       (Player.level > Justiciarlevel) &&
  630.       gamestatusp(GAVE_STARGEM) &&
  631.       Player.alignment > 300) {
  632.     print1("You have succeeded in your quest!");
  633.     morewait();
  634.     print1("The previous Justiciar steps down in your favor.");
  635.     print2("You are now the Justiciar of Rampart and the Order!");
  636.     strcpy(Justiciar,Player.name);
  637.     Justiciarlevel = Player.level;
  638.     morewait();
  639.     Justiciarbehavior = fixnpc(4);
  640.     save_hiscore_npc(15);
  641.     clearmsg();
  642.     print1("You are awarded a blessed shield of deflection!");
  643.     morewait();
  644.     newitem = ((pob) checkmalloc(sizeof(objtype)));
  645.     *newitem = Objects[SHIELDID+7]; /* shield of deflection */
  646.     newitem->blessing = 9;
  647.     gain_item(newitem);
  648.     morewait();
  649.     Player.rank[ORDER] = JUSTICIAR;
  650.     Player.maxstr += 5;
  651.     Player.str += 5;
  652.     Player.maxpow += 5;
  653.     Player.pow += 5;
  654.   }
  655.   if (Player.alignment < 1) {
  656.     if (Player.rank[ORDER] > 0) {
  657.       print1("You have been tainted by chaos!");
  658.       print2("You are stripped of your rank in the Order!");
  659.       morewait();
  660.       Player.rank[ORDER]= -1;
  661.       send_to_jail();
  662.     }
  663.     else
  664.       print1("Get thee hence, minion of chaos!");
  665.   }
  666.   else if (Player.rank[ORDER] == -1)
  667.     print1("Thee again?  Get thee hence, minion of chaos!");
  668.   else if (Player.rank[ORDER] == 0) {
  669.     if (Player.rank[ARENA] != 0) 
  670.       print1("We do not accept bloodstained gladiators into our Order.");
  671.     else if (Player.rank[LEGION] != 0) 
  672.       print1("Go back to your barracks, mercenary!");
  673.     else {
  674.       print1("Dost thou wish to join our Order? [yn] ");
  675.       if (ynq1()=='y') {
  676.     print1("Justiciar ");
  677.     nprint1(Justiciar);
  678.     nprint1(" welcomes you to the Order.");
  679.     print2("'Mayest thou always follow the sublime path of Law.'");
  680.     morewait();
  681.     print1("You are now a Gallant in the Order.");
  682.     print2("You are given a horse and a blessed spear.");
  683.     morewait();
  684.     Player.rank[ORDER] = GALLANT;
  685.     Player.guildxp[ORDER] = 1;
  686.     setgamestatus(MOUNTED);
  687.     newitem = ((pob) checkmalloc(sizeof(objtype)));
  688.     *newitem = Objects[WEAPONID+19]; /* spear */
  689.     newitem->blessing = 9;
  690.     newitem->plus = 1;
  691.     newitem->known = 2;
  692.     gain_item(newitem);
  693.       }
  694.     }
  695.   } else {
  696.       print1("'Welcome back, Paladin.'");
  697.       if (!gamestatusp(MOUNTED)) {
  698.     print2("You are given a new steed.");
  699.     setgamestatus(MOUNTED);
  700.       }
  701.       morewait();
  702.       clearmsg();
  703.       if ((Player.hp < Player.maxhp) || (Player.status[DISEASED]) ||
  704.     (Player.status[POISONED]))
  705.     print1("Your wounds are treated by a medic.");
  706.       cleanse(0);
  707.       Player.hp = Player.maxhp;
  708.       Player.food = 40;
  709.       print2("You get a hot meal from the refectory.");
  710.       morewait();
  711.       clearmsg();
  712.       if (Player.rank[ORDER]==PALADIN) {
  713.     if (Player.level <= Justiciarlevel)
  714.       print2("You are not experienced enough to advance.");
  715.     else if (Player.alignment < 300)
  716.       print2("You are not sufficiently Lawful as yet to advance.");
  717.     else print2("You must give the Star Gem to the LawBringer.");
  718.       }
  719.       else if (Player.rank[ORDER]==CHEVALIER) {
  720.     if (Player.guildxp[ORDER] < 4000)
  721.       print2("You are not experienced enough to advance.");
  722.     else if (Player.alignment < 200)
  723.       print2("You are not sufficiently Lawful as yet to advance.");
  724.     else {
  725.       print1("You are made a Paladin of the Order!");
  726.       print2("You learn the Spell of Heroism and get Mithril Plate!");
  727.       morewait();
  728.       newitem = ((pob) checkmalloc(sizeof(objtype)));
  729.       *newitem = Objects[ARMORID+11]; /* mithril plate armor */
  730.       newitem->blessing = 9;
  731.       newitem->known = 2;
  732.       gain_item(newitem);
  733.       morewait();
  734.       clearmsg();
  735.       print1("To advance you must rescue the Star Gem and return it");
  736.       print2("to its owner, the LawBringer, who resides on Star Peak.");
  737.       morewait();
  738.       print1("The Star Gem was stolen by the cursed Prime Sorceror,");
  739.       print2("whose headquarters may be found beyond the Astral Plane.");
  740.       morewait();
  741.       print1("The Oracle will send you to the Astral Plane if you");
  742.       print2("prove yourself worthy to her.");
  743.       morewait();
  744.       Spells[S_HERO].known = TRUE;
  745.       Player.rank[ORDER] = PALADIN;
  746.     }
  747.       }
  748.       else if (Player.rank[ORDER]==GUARDIAN) {
  749.     if (Player.guildxp[ORDER] < 1500)
  750.       print2("You are not experienced enough to advance.");
  751.     else if (Player.alignment < 125)
  752.       print2("You are not yet sufficiently Lawful to advance.");
  753.     else {
  754.       Player.rank[ORDER] = CHEVALIER;
  755.       print1("You are made a Chevalier of the Order!");
  756.       print2("You are given a Mace of Disruption!");
  757.       morewait();
  758.       clearmsg();
  759.       newitem = ((pob) checkmalloc(sizeof(objtype)));
  760.       *newitem = Objects[WEAPONID+25]; /* mace of disruption */
  761.       newitem->known = 2;
  762.       gain_item(newitem);
  763.     }
  764.       }
  765.       else if (Player.rank[ORDER]==GALLANT) {
  766.     if (Player.guildxp[ORDER] < 400)
  767.       print2("You are not experienced enough to advance.");
  768.     else if (Player.alignment < 50)
  769.       print2("You are not Lawful enough to advance.");
  770.     else  {
  771.       print1("You are made a Guardian of the Order of Paladins!");
  772.       print2("You are given a Holy Hand Grenade (of Antioch).");
  773.       morewait();
  774.       print1("You hear a nasal monotone in the distance....");
  775.       print2("'...and the number of thy counting shall be 3...'");
  776.       morewait();
  777.       clearmsg();
  778.       Player.rank[ORDER] = GUARDIAN;
  779.       newitem = ((pob) checkmalloc(sizeof(objtype)));
  780.       *newitem = Objects[ARTIFACTID+7]; /* holy hand grenade. */
  781.       newitem->known = 2;
  782.       gain_item(newitem);
  783.     }
  784.       }
  785.   }
  786. }
  787.